<?php

/**
 * Форма проверки ответов на секретные вопросы при восстановлении забытого пароля.
 *
 */
class Security_Action_Forgot_Step2 extends Security_Action_Secured_Abstract
{
    /**
     * Путь к файлу шаблона.
     *
     * @var string
     */
    protected $_template = 'user/forgot/questions.tpl';

    /**
     * Путь к файлу шаблона страницы с сообщением о том, что письмо с
     * новым паролем отправлено.
     *
     * @var string
     */
    protected $_template_saved = 'user/forgot/new-sent.tpl';

    /**
     * Флаг, указывающий, что после сохранения данных формы не нужно показывать
     * сответствующее сообщение.
     *
     * @var boolean
     */
    protected $_no_message = true; 
    
    /**
    * @desc Incomig user email from POST
    * 
    * @param string
    */
    protected $_email; 
    
    /**
     * Конструктор
     *
     * @param   array   $params
     */
    public function __construct($params = array()) 
    {
        $this->_email = Application::getRequest()->post('email');
        
        parent::__construct($params);
    }
    
    /**
     * Инициализирует элементы формы.
     *
     */
    protected function _initElements()
    {
        // скрытое поле для передачи значения поля "email" с предыдущего шага
        $this->_addElement('email', 'hidden', array(
            'value' => $this->_email,
        ));
        
        $this->_addQuestions();
    }
    
    /**
     * Определяет, была ли отправлена форма.
     *
     * @param   string  $name
     * @return  mixed
     */
    protected function _isSubmitted()
    {
        return parent::_isSubmitted() && isset($_POST['answers']);
    }

    /**
     * Сохраняет данные формы. Генерирует хэш и отправляет пользователю почтовое
     * сообщение.
     *
     */
    protected function _save()
    {
        // сбрасываем пароль пользователя
        Security_Utils_Subject::reset($this->id, Security_Subject::USER);

        Application::getResponse()->assign('result', true);
    }

    /**
     * Устанавливает идентификатор редактируемой записи.
     *
     */
    protected function _defineId()
    {
        return Security_Utils_Subject::getSubjectByEmail($this->_email);
    }
}
